define(function() {

  return function(fn, context) {
    var scheduled = false,
        args,
        oldDispose;

    if (context && context.dispose) {
      oldDispose = context.dispose;
      context.dispose = function() {
        this._disposed = true;
        oldDispose.apply(this, arguments);
      };
    }

    return function() {
      var self = this;
      args = Array.prototype.slice.call(arguments, 0);
      if (!scheduled) {
        setTimeout(function() {
          if (!context || !context._disposed) {
            fn.apply(context || self, args);
          }
          scheduled = false;
        }, 0);
      }
      scheduled = true;
    };
  };

});
@@ -14,16 +14,240 @@
 on() %7B%0A%0A
+  // Acts like debounce with a (nearly) zero%0A  // second delay, except that it will call%0A  // the %60fn%60 parameter in the specified%0A  // context, and will cancel the debounced call%0A  // if %60dispose()%60 is called on the context%0A
   return

Add some documentation to batch_calls