Thanks for posting, it was interesting.
There were some good answers to the cooperating agent problem. I think the best solution is with a situation object that appears, or is created by an agent. It would have slots for X number of agents and agents could sign up to it in their evaluator, but they are not permitted to start. After all slots are filled, they can pick that task/behaviour. Further messaging is then likely needed to coordinate time and place for the activity. The messaging can happen through the situation object.
The situation object should probably be a base class with a subclass for each concrete activity/situation. All the behaviours would be foreseen by the designer, so they are not really "unexpected" as the question was formulated.
One of the panelists said "why not a squad", but I don't think a squad solution makes sense, because the activities are time limited and anyone can participate.
Also, my opinion is that it is best to keep AI logic in each agent, but perhaps a "manager" class could be responsible for generating some of these situation objects.