I get your point concering the "many to one" relationship. I've always used a main window and a main controller which would be notified whenever windowClosing would be called on the main window. thus I had no "many to one" relationship. Considering your situation, I think your solution is very good and flexible.
What concerns the argument you give the constructor of the ExitAction: actually, it doesn't matter what window event has been the trigger of the ExitAction (it should have been some windowClosing thing, anyway). When ExitAction.actionPerformed is called, the only thing that might be of interest is the source of the event (the window). Thus, I would call (for example):
exitAction.actionPerformed(new ActionEvent(theWindow, ActionEvent.ACTION_PERFORMED, "Exit"));
you might be interested in the "shutdown-hook": http://www.javaspecialists.co.za/archive/Issue011.html