docs: function(obj, method_names, delay){
  
  
  		var original_methods 	= {},
  			chain				= Promise.resolve()
  
  
  		if(!method_names.forEach) method_names = [method_names]
  
  		function chainRun(method_name, ...args){
  			if(!chain.isPending()) chain = Promise.resolve()
  
  			return chain = 	chain
  							.catch( e 	=> 	console.log(e) ) /*TODO*/
  							.then( ()	=>	Promise.delay(delay || 0))
  							.then( original_methods[method_name].bind(obj, ...args) )
  		}
  
  		function restore(){
  			method_names.forEach( method_name => {
  				obj[method_name] = original_methods[method_name]
  			})
  		}
  
  
  
  		method_names.forEach( method_name => {
  			if(typeof obj[method_name] != 'function') throw new TypeError("Not a method '"+method_name+ "' on "+obj.toString())
  			original_methods[method_name]	= obj[method_name]				
  			obj[method_name] 				= chainRun.bind(this, method_name)
  			obj[method_name].restore 		= restore
  		})
  
  	}