code: function _constructor(self, opts) {
  			var tmp;
  
  			// Check opts validity
  			var validity = SchemaObject.validate(opts, copy_definition);
  			if(!validity.valid) { throw new TypeError("bad argument: " + util.inspect(validity) ); }
  
  			// Call parent constructors
  			ParentType.call(self, opts);
  
  			// Call custom constructors
  			//util.debug( util.inspect( _user_defined_constructors ));
  			if(Object.prototype.hasOwnProperty.call(_user_defined_constructors, type_name)) {
  				tmp = _user_defined_constructors[type_name].call(self, opts);
  				if(is.def(tmp)) {
  					SchemaObject.prototype._setValueOf.call(self, tmp);
  				}
  				//util.debug( util.inspect( tmp ) );
  			}
  
  			// Setup getters and setters if schema has properties
  			//util.debug( "\ndefinition = \n----\n" + util.inspect( definition ) + "\n----\n\n" );
  			if(definition && definition.properties) {
  				Object.getOwnPropertyNames(definition.properties).forEach(function(key) {
  					self.__defineGetter__(key, function(){
  						return self.valueOf()[key];
  					});
  					self.__defineSetter__(key, function(val){
  						// FIXME: Implement value validation and do not use `.valueOf()`!
  						self.valueOf()[key] = val;
  					});
  				});
  			}
  
  		}
docs: /* This is our real constructor which will be called in `new Function()`