code: function child(details) {
  
  		// If it's an array, create a list of options
  		if(is.array(details)) {
  			return new OptionsNode(details);
  		}
  
  		// Else if we got an object
  		else if(is.object(details)) {
  
  			// If array is present
  			if('__array__' in details) {
  				return new ArrayNode(details);
  			}
  
  			// Else if we have a hash
  			else if('__hash__' in details) {
  				return new HashNode(details);
  			}
  
  			// Else if we have a type
  			else if('__type__' in details) {
  
  				// If the type is an object, pass it to child again
  				if(is.object(details['__type__'])) {
  					return child(details['__type__']);
  				}
  
  				// Else it's a plan Node
  				else {
  					return new Node(details);
  				}
  			}
  
  			// Else it's most likely a parent
  			else {
  				return new Parent(details)
  			}
  		}
  
  		// Else if we got a string, use the value as the type
  		else if(is.string(details)) {
  			return new Node(details);
  		}
  
  		// Else, raise an error
  		else {
  			throw 'details invalid';
  		}
  	}
docs: Child
  
  A private function to figure out the child node type
  
  @name child
  @access private
  @param object details			An object describing a data point
  @return BasicNode