This all seems quite complex, why not:

```javascript
    self.incr_metric = function(im, metric) {
        var p = im.api_request('kv.incr', {
            key: 'metrics.' + metric,
            amount: 1
        });

        p.add_callback(function (value) {
            return im.metrics.fire_max(metric, value);
        });

        return p;
    }
```