We do this a lot in the Streams API, and I've never been a fan of it. Instead I prefer an abstracted approach like the following:
```javascript
function addProbe(self, name, signature) {
  // do its thing...
}

StaticProvider.prototype.addProbe = function staticAddProbe(name, signature, binding) {
  var probe = addProbe(this, name, signature);
  // ...
};

Provider.prototype.addProbe = function providerAddProbe(name, signature, arg2, arg3) {
  return addProbe(name, signature, arg2, arg3);
};
```

Or even just change the location of the function call. Because, heaven forbid, someone overwrites `Provider#addProbe()` there's going to be an implicit change in `StaticProvider#addProbe()`. So sort of like the following:
```javascript
function addProbe(name, signature/*, arg2, arg3 */) {
  // do its thing...
}

StaticProvider.prototype.addProbe = function staticAddProbe(name, signature, binding) {
  var probe = addProbe.call(this, name, signature);
  // ...
};

Provider.prototype.addProbe = function providerAddProbe() {
  return addProbe.apply(this, arguments);
};
```
@mraleph gave a talk about how V8 is smart enough to see that the `arguments` object is passed directly to the `.apply()` and so it never has to be materialized in the initial call. So, to be honest, there would be little if any performance imact.