Vabbeh ho risolto in una maniera un pò peciona... sotto un piccolo esempio su come risolvere la problematica:

codice:
	var Pippo = Class.create({
			
			listeners : [],
			
			initialize : function(){
				this.addListener(this.pippoide.bind(this), this);
			},
			
			addListener : function( func , obj ){
				
				var responder = {};
				
				responder.fnc = func
				responder.handler = obj;
				
				this.listeners.push(responder);
				
			},
			
			dispatch : function(){
				
				this.listeners.each( function(responder){
							
							responder.fnc.apply(responder, ['hello world']);
													   
					});
				
			},
			
			removeListener : function ( obj ){
				
				var tmp = [] ;
				
				
				this.listeners.each( function(e){
						
							if(e.handler !== obj ){
								tmp.push(e);
							}
												
						});
				
				this.listeners = tmp;
				
			},
			
			start : function(){ alert('start fired'); this.dispatch(); },
			
			pippoide : function(e){ alert('pippo say: '+e); }
		});

	var cA = Class.create({
						  name : 'mi chiamo pippo',
						  pippo : function(e){ alert(e+" - "+this.name); }
						  
						  });


	var obs = new Pippo();
	var lst = new cA();
	
	obs.addListener( lst.pippo.bind(lst), lst );
	
	obs.start();
	
	obs.removeListener(lst);
	
	obs.start();