Para crear métodos estáticos, no es necesario el uso de 
prototype, basta con hacer uso de la 
Dot Notation o la 
Bracket Notation para crear métodos estáticos en la función, pues al fin y al cabo, en JS todos son objetos. 
 
Lo malo está en que al ser estático, al llamar a la función para generar otro array, se añade al que previamente se creó. Veré si puedo adaptar esto.  
Edito: Sí se pudo. 
    
Código Javascript
:
Ver originalvar range = function(start, end, step){
        range.array = range.array || [];
        if (typeof start === typeof end){
            range.array.push(typeof start === "string" ? start[0] : start);
            step = start > end ? 
                   !isNaN(step) && isFinite(step) && step < 0 ? step : -step || -1 : 
                   !isNaN(step) && isFinite(step) ? step : 1;
            start = typeof start === "string" ? 
                    String.fromCharCode(start.charCodeAt(0) + step) : 
                    start += step;
            return (step > 0 && start <= end) || (step < 0 && start >= end) ? 
                    range(start, end, step) : (function(){
                        var aux = range.array;
                        range.array = [];
                        return aux;
                    })();
        }
        return false;
    };
 
console.log(range(1, 10)); //1,2,3,4,5,6,7,8,9,10
console.log(range("a", "z")); //a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z