docs: function(modelObj, type, success, error, method) {
                  var args;
  
                  // If `modelObj` is an Array, it it means we are coming from
                  // the queued request, and we're passing already-serialized data.
                  if (can.isArray(modelObj)) {
                      // In that case, modelObj's signature will be `[modelObj, serializedData]`, so we need to unpack it.
                      args = modelObj[1];
                      modelObj = modelObj[0];
                  } else {
                      // If we aren't supplied with serialized data, we'll make our own.
                      args = modelObj.serialize();
                  }
                  args = [args];
  
                  var deferred,
                      model = modelObj.constructor,
                      jqXHR;
  
                  // When calling `update` and `destroy`, the current ID needs to be the first parameter in the AJAX call.
                  if (type === 'update' || type === 'destroy') {
                      args.unshift(getId(modelObj));
                  }
                  jqXHR = model[type].apply(model, args);
  
                  // Make sure that can.Model can react to the request before anything else does.
                  deferred = pipe(jqXHR, modelObj, function(data) {
                      // `method` is here because `"destroyed" !== "destroy" + "d"`.
                      // TODO: Do something smarter/more consistent here?
                      modelObj[method || type + "d"](data, jqXHR);
                      return modelObj;
                  });
  
                  // Hook up `abort`
                  if (jqXHR.abort) {
                      deferred.abort = function() {
                          jqXHR.abort();
                      };
                  }
  
                  deferred.then(success, error);
                  return deferred;
              }