Modificando ligeramente el algoritmo que puse aquí, puedes conseguir lo que pides:
http://www.forosdelweb.com/f13/rando...epetir-997287/
Mezclas el array, y lo vas recorriendo de 0 hasta su length-1 en cada tick del timeout. Cuando llegues a la última posición, vuelves a mezclar el array y vuelta a empezar.