code: function debounce(func, wait, immediate) {
      var timeout, args, context, timestamp, result;
  
      var later = function() {
        var last = +new Date - timestamp;
  
        if (last < wait && last >= 0) {
          timeout = setTimeout(later, wait - last);
        } else {
          timeout = null;
          if (!immediate) {
            result = func.apply(context, args);
            if (!timeout) context = args = null;
          }
        }
      };
  
      return function() {
        context = this;
        args = arguments;
        timestamp = +new Date;
        var callNow = immediate && !timeout;
        if (!timeout) timeout = setTimeout(later, wait);
        if (callNow) {
          result = func.apply(context, args);
          context = args = null;
        }
  
        return result;
      };
    }
docs: include a modified debounce underscorejs helper function. see - http://underscorejs.org/docs/underscore.html#section-83 - http://underscorejs.org/#debounce