docs: function thunkify(input, ctx, key) {
      return function() {        
          ctx = ctx || this;
          
          var args = [];
          for (var i = 0; i < arguments.length; ++i) {
              args.push(arguments[i]);
          }
  
          return function(done) {
              var called;
              args.push(function() {
                  if (!called) {
                      called = true;
                      done.apply(null, arguments);
                  }
              });
              try {
                  input.apply(ctx, args);
              } catch (err) {
                  done(err);
              }
          };
      };
  }