code: function toJSON() {
  	var self = this
  		, keys = self.keys()
  		, serializedStore = {};
  
  	_.each(keys, function(key) {
  		var modelOrCollection = self.get(key)
  			, jsonRepresentation = modelOrCollection.toJSON()
  			, identifier = self.findRegisteredIdentifier.call(
  				self, modelOrCollection);
  
  		if(identifier) {
  				var serializedData = {
  					dataStoreModelIdentifier: identifier
  					, data: jsonRepresentation
  				};
  
  			serializedStore[key] = serializedData;
  		} else {
  			throw new Error('Could not serialize DataStore because ' +
  				'a required modelOrCollection was not registered before!');
  		}
  
  	});
  
  	debug('to json `%j`', serializedStore);
  
  	return serializedStore;
  }
docs: Function: toJSON
  Serializes all models and collections of this DataStore into a plain
  JavaScript object.
  
  Beside the actual data, this object contains meta information to accomplish
  a proper deserialization with <Barefoot.DataStore.Client.parse>. This means,
  the DataStore can completely restore its content from a given serialized
  version of itself, including correct model and collection types.
  
  Please make sure you registered all model and collection types with
  <Barefoot.DataStore.registerModel> and
  <Barefoot.DataStore.registerCollection>. Otherwise parse will throw an error
  as soon as it tries to deserialize such an object.
  
  Returns:
  (Object) A serialized version of this DataStore