docs: function(fn, syntheticArgs) {
  		var $this = this;
  		syntheticArgs = syntheticArgs || [];
  		/**
  		 * Ensure to have it in the next event loop for better async
  		 */
  		var processResponder = function() {
  			try {
  				if (fn) {
  					/**
  					 * Insert a done() or ok() argument to other needed arguments
  					 */
  					syntheticArgs.unshift(function() {
  						/**
  						 * Call the next in queue
  						 */
  						$this.next.apply($this, arguments);
  					});
  					/**
  					 * Call the function finally
  					 */
  					fn.apply(this, syntheticArgs);
  				} else {
  					syntheticArgs = syntheticArgs || [];
  					/**
  					 * If no function passed, call the next in queue
  					 */
  					$this.next.apply(this, syntheticArgs);
  				}
  			} catch(e) {
  				/**
  				 * An error caught is thrown directly to the catch handler, if any
  				 */
  				if (this.onCatch) {
  					this.onCatch(e);
  				} else {
  					throw e;
  				}
  			}
  		};
  		if (typeof process === "undefined") {
  			processResponder();
  		} else {
  			process.nextTick(processResponder);
  		}
  		/**
  		 * Return self for chaining
  		 */
  		return this;
  	}