This factors the throttling logic out of $.throttled, into a constructor that can throttle any function. Now the program is in three layers: makeThrottled (which is even more complex, but can be used to throttle any function); $.throttled; and the application-level code that uses $.throttled.

Results

function makeThrottled(fn, interval) {
    var queue = [];
    var nextTime = 0;
    return function() {
        queue.push(Array.prototype.slice.call(arguments, 0));
        if (queue.length == 1) schedule();
    }
    function schedule() {
        setTimeout(function() {
            nextTime = new Date().getTime() + interval;
            fn.apply(null, queue.shift());
            if (queue.length) schedule();
        }, Math.max(0, nextTime - new Date().getTime()));
    }
}
$.throttled = makeThrottled($.get, 1000);
for (var i = 0; i < 10; i++) $.throttled('services/time', log);