From the Flex docs:
In general, the easiest way for a user-defined class to gain event dispatching capabilities is to extend EventDispatcher. If this is impossible (that is, if the class is already extending another class), you can instead implement the IEventDispatcher interface, create an EventDispatcher member, and write simple hooks to route calls into the aggregated EventDispatcher.
The above techniques make it possible include the core EventDispatcher functionality in your custom classes, but one thing to watch is that unless you explicitly register an EventListener on the instance the event is only available to the class, not the application.
Example: you have a class called myClass that extends EventDispatcher, and contains a method that dispatches an event myCustomEvent. In the application register an EventListener and handler with the object:
var myObject:myClass = new myClass();
myObject.addEventListener("myCustomEvent", myCustomEventHandler);
This allows the event to be captured by the application. If you want to limit the event scope to the class, add the listener and handler to the class directly. Thanks to Kieran for his help on this one
