docs: function eachAsync(obj, iterator, cb, bind){
  		if(_.size(obj) == 0)
  			return cb.call(bind);
  		
  		var i = 0,
  			hasKeys = _.isIterable(obj),
  			values = hasKeys ? _.pairs(obj) : obj,
  			size = _.size(values);
  
  		function loop(){
  			var cursor;
  			
  			if(i >= size)
  				cursor = function(){};
  
  			else if(i == size - 1 && _.isFunction(cb))
  				cursor = function(){
  					cb.call(bind);
  					loop();
  				};
  				
  			else if(i < size)
  				cursor = function(){
  					loop();
  				};
  			
  			if(i < size){	
  				if(hasKeys)
  					iterator.call(bind, values[i][1], values[i][0], cursor, obj);	
  				
  				else			
  					iterator.call(bind, values[i], i, cursor, obj);	
  			}
  			
  			i++;
  		};
  			
  		loop();
  		
  		return obj;
  	}