docs: function(deferred, options) {
        var staleModels,
          formModel = this,
          responsesSucceeded = 0,
          responsesFailed = 0,
          responses = {},
          oldValues = {},
          models = formModel.getTrackedModels(),
          numberOfSaves = models.length;
        // If we're not forcing a save, then throw an error if the models are stale
        if (!options.force) {
          staleModels = formModel.checkIfModelsAreStale();
          if (staleModels.length > 0) {
            throw {
              name: 'Stale data',
              staleModels: staleModels
            };
          }
        }
        // Callback for each response
        function responseCallback(response, model, success) {
          // Add response to a hash that will eventually be returned through the promise
          responses[model.cid] = {
              success: success,
              response: response
            };
          // If we have reached the total of number of expected responses, then resolve or reject the promise
          if (responsesFailed + responsesSucceeded === numberOfSaves) {
            if (responsesFailed > 0) {
              // Rollback if any responses have failed
              if (options.rollback) {
                _.each(formModel.getTrackedModels(), function(model) {
                  model.set(oldValues[model.cid]);
                  if (responses[model.cid].success) {
                    model.save();
                  }
                });
              }
              formModel.trigger('save-fail', responses);
              deferred.reject(responses);
            } else {
              formModel.trigger('save-success', responses);
              deferred.resolve(responses);
            }
          }
        }
        // Grab the current values of the object models
        _.each(models, function(model) {
          oldValues[model.cid] = formModel.__getTrackedModelFields(model);
        });
        // Push the form model values to the object models
        formModel.push();
        // Call save on each object model
        _.each(models, function(model) {
          model.save().fail(function() {
            responsesFailed++;
            responseCallback(arguments, model, false);
          }).done(function() {
            responsesSucceeded++;
            responseCallback(arguments, model, true);
          });
        });
      }