docs: function( key, options, update ) {
  			options || ( options = {} );
  			var setUrl,
  				requests = [],
  				rel = this.getRelation( key ),
  				keyContents = rel && rel.keyContents,
  				toFetch = keyContents && _.select( _.isArray( keyContents ) ? keyContents : [ keyContents ], function( item ) {
  					var id = Backbone.Relational.store.resolveIdForItem( rel.relatedModel, item );
  					return !_.isNull( id ) && ( update || !Backbone.Relational.store.find( rel.relatedModel, id ) );
  				}, this );
  			
  			if ( toFetch && toFetch.length ) {
  				// Create a model for each entry in 'keyContents' that is to be fetched
  				var models = _.map( toFetch, function( item ) {
  					var model;
  
  					if ( _.isObject( item ) ) {
  						model = rel.relatedModel.build( item );
  					}
  					else {
  						var attrs = {};
  						attrs[ rel.relatedModel.prototype.idAttribute ] = item;
  						model = rel.relatedModel.build( attrs );
  					}
  
  					return model;
  				}, this );
  				
  				// Try if the 'collection' can provide a url to fetch a set of models in one request.
  				if ( rel.related instanceof Backbone.Collection && _.isFunction( rel.related.url ) ) {
  					setUrl = rel.related.url( models );
  				}
  				
  				// An assumption is that when 'Backbone.Collection.url' is a function, it can handle building of set urls.
  				// To make sure it can, test if the url we got by supplying a list of models to fetch is different from
  				// the one supplied for the default fetch action (without args to 'url').
  				if ( setUrl && setUrl !== rel.related.url() ) {
  					var opts = _.defaults(
  						{
  							error: function() {
  								var args = arguments;
  								_.each( models, function( model ) {
  										model.trigger( 'destroy', model, model.collection, options );
  										options.error && options.error.apply( model, args );
  									});
  							},
  							url: setUrl
  						},
  						options,
  						{ add: true }
  					);
  
  					requests = [ rel.related.fetch( opts ) ];
  				}
  				else {
  					requests = _.map( models, function( model ) {
  						var opts = _.defaults(
  							{
  								error: function() {
  									model.trigger( 'destroy', model, model.collection, options );
  									options.error && options.error.apply( model, arguments );
  								}
  							},
  							options
  						);
  						return model.fetch( opts );
  					}, this );
  				}
  			}
  			
  			return requests;
  		}