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