ещё вариант ... без проверки входных данных
function rand(val, min, max, length) {
var obj = {}, arr = [val];
obj[val] = true;
length--;
while (length) {
var rnd = Math.floor(Math.random() * (max - min + 1)) + min;
if (!obj[rnd]) {
obj[rnd] = true;
length--;
arr[Math.random() > .5 ? 'push' : 'unshift'](rnd)
};
}
return arr
}
alert(rand(3, 7, 12, 4))