docs: function Deferred(timeout, rejection) {
  
      /* Proper construction */
      if (!(this instanceof Deferred)) return new Deferred(timeout, rejection);
  
      if (timeout === undefined) {
        Deferring.call(this);
  
      } else if ((typeof(timeout) === 'number') && (timeout >= 0)) {
        if (rejection == null) rejection = new Error("Timeout waiting for resolution/rejection");
        else if (typeof(rejection) === 'string') rejection = new Error(rejection);
  
        var deferred = this;
        var timeoutId = global.setTimeout(function() {
          deferred.reject(rejection);
        }, timeout);
  
        Deferring.call(this, function(success) {
          global.clearTimeout(timeoutId);
          return success;
        }, function(failure) {
          global.clearTimeout(timeoutId);
          throw failure;
        });
  
      } else {
        throw new TypeError("Deferred constructor must be called with a non-negative number")
      }
    }