is it so difficult to save the return of before/after and call remove
on it? Here's a simple implementation :
aspect.onceAfter: function(target, methodName, advice, receiveArguments){
var handle = aspect.after(target, methodName, function(){
handle.remove();
advice.apply(null, arguments);
}, receiveArguments);
}