code: function deepClone(o, visited) {
  			var clone, id, type = _.util.type(o);
  			visited = visited || {};
  
  			switch (type) {
  				case 'Object':
  					id = _.util.objId(o);
  					if (visited[id]) {
  						return visited[id];
  					}
  					clone = {};
  					visited[id] = clone;
  
  					for (var key in o) {
  						if (o.hasOwnProperty(key)) {
  							clone[key] = deepClone(o[key], visited);
  						}
  					}
  
  					return clone;
  
  				case 'Array':
  					id = _.util.objId(o);
  					if (visited[id]) {
  						return visited[id];
  					}
  					clone = [];
  					visited[id] = clone;
  
  					o.forEach(function (v, i) {
  						clone[i] = deepClone(v, visited);
  					});
  
  					return clone;
  
  				default:
  					return o;
  			}
  		}
docs: Deep clone a language definition (e.g. to extend it)