docs: function __getSetCacheResults(o) {
  
    var self = this,
        storage = o.storage,
        cacheID = o.cacheID,
        cacheFilter = o.cacheFilter,
        method = o.method,
        args = o.args,
        callback = o.callback,
        timeout = o.timeout;
  
    // See if cache is available
    storage.get(cacheID, function(err, data) {
      
      if (err) {
        
        callback.call(self, err, null);
        
      } else {
        
        if ( data ) {
          
          // Object found in cache
          
          // Run callback with cached array
          var results = JSON.parse(data);
          if (app.debugLog) app.debug("Using cached data for " + cacheID);
          callback.apply(self, results);
          
        } else {
          
          // Cache new data
          
          self[method].apply(self, args.concat([function(err) {
            
            if (err) {
              
              callback.call(self, err, null);
              
            } else {
              
              // Get results array from arguments
              var results = slice.call(arguments, 0);
              
              // Run cache filter if available
              if (cacheFilter instanceof Function) {
                results = cacheFilter.apply(self, results);
              }
              
              // Set cache data
              storage.set(cacheID, JSON.stringify(results), function(err) {
                
                if (err) {
                  
                  callback.call(self, err, null);
  
                } else {
                  
                  // If timeout available, set expiration
                  if (timeout && typeof timeout == 'number') {
                    
                    // Set cache expiration
                    storage.expire(cacheID, timeout, function(err) {
                      
                      if (err) callback.call(self, err, null);
                      
                      else {
                        
                        // Run callback with results array (after expiration set)
                        if (app.debugLog) app.debug(util.format("Cached new data for %s (expires in %d seconds)", cacheID, timeout));
                        callback.apply(self, results);
                        
                      }
                      
                    });
                    
                  } else {
                    
                    // Run callback with results array
                    if (app.debugLog) app.debug("Cached new data for " + cacheID);
                    callback.apply(self, results);  
                    
                  }
                  
                }
              });
            }
          }]));
          
        }
      }
      
    });
  
  }