First, what is DF? I can name a handful of games that might be called DF =)
So many ways to organize, let's call the objects Soldiers so this reads better.
1) One AI that maintains all states internally, when a new Soldier is created it asks the AI to create a state setup for it; the soldier is controlled by the AI and matches its animations and all that to what the AI says that it's doing right now. Pro: AI has full control, data is localized, tweaking is centralized, soldier is basically just a playback mechanism; Con: custom types pollute the generic handlers.
2) One AI and the soldiers carry around their own state as their class. Pro: less maintenance work for the main AI, soldiers can customize their state changes locally, Con: AI has to be more complex to handle unexpected inputs from soldiers, behavior changes have to be made through all soldier classes that work with state.
Pro to both of the above: coordinated soldier activity is easy.
3) Localized AI for each soldier, probably descended from an AI or includes one. Pro: easy to customize behavior without having to touch both local and AI code, Con: soldiers working together will be difficult/complex to make happen, making global changes to how AI works will involve many classes.
Assuming that you really, truly need each and every unit to be independent and act on its own like the special snowflake that it is, then probably #3 is a better option. I suspect, however, that what you really want is for each unit to act on local state but still under global guidelines, in which case #1 or #2 might work better.
I personally prefer #1, but thats' because I like to build simulations where unit "type" determines activity and it makes the most sense and is easier to maintain.