docs: function generate_nested_object (schema, length) {
  	length = length || default_configuration.length;
  	/*handle array*/
  	if(schema.type === 'array'){
  		if(schema.elemType) {
  			/*simple array*/
  			return gen['array'](validate_type(schema.elemType), length || default_configuration.length);
  		}
  		if(schema.elemSchema) {
  			/*nested array*/
  			var ret_array = [];
  			for(var i=0; i<length; i++) {
  				ret_array.push(generate_nested_object(schema.elemSchema, length || default_configuration.length));
  			}
  			return ret_array;
  		}
  	}
  	var ret_object = {};
  	for(var key in schema) {
  		/*handle array*/
  		if(schema[key].type === 'array') {
  			if(schema[key].elemType) {
  				/*simple array*/
  				ret_object[key] = gen['array'](validate_type(schema[key].elemType), default_configuration.length);
  				continue;
  			}
  			if(schema[key].elemSchema) {
  				/*nested array*/
  				ret_object[key] = [];
  				for(var i=0; i<default_configuration.length; i++) {
  					ret_object[key].push(generate_nested_object(schema[key].elemSchema), length || default_configuration.length);
  				}
  				continue;
  			}
  			continue;
  		}
  		/*nested object*/
  		var is_nested = !Object.keys(schema[key]).every(function(key) {
  			return validate_schema_prop(key);
  		});
  		if(is_nested) {
  			ret_object[key] = generate_nested_object(schema[key], default_configuration.length);
  			continue;
  		}
  		/*simple type*/
  		ret_object[key] = gen[schema[key].type];
  		continue;
  	}
  	return ret_object;
  }