It's as good a method as any other, at least where Prism is concerned. One way I've done it before is to set up one Module/Class as your "Navigation broker"; for MDI type applications, I usually call it WindowManager due to lack of creativity. This guy will get injected with the IRegionManager and the IEventAggregator and start listening for any "New Window" or "Navigate To" type of events and alter/create regions appropriately. If you want to get slightly clever, you can start using scoped RegionManagers:
http://msdn.microsoft.com/en-us/library/cc707903.aspx
http://blogs.msdn.com/erwinvandervalk/archive/2009/04/29/how-to-build-an-outlook-style-application-with-prism-v2-part-2.aspx
The main problem with this tactic (and using the event aggregation aspects in general) is that any CompositePresentationEvents you need to handle by multiple modules or at least "outside" of the raising module, you need to have declared in a common location (I usually put them in a project called Infrastructure). This I am not overly fond of.