join не удаляет, а объединяет, и все работает:
var colors = ["9", "a", "b", "c", "d", "e", "f"];
alert(colors.join(''))
.replace(/,/, "") || .replace(",", "") - к массиву, это глупость конечно, то что массив записан как ["9", "a", ...] совсем не означает, что в нем есть запятые, это всего лишь синтаксис описания массива. Тем более .push() вообще не имеет ввиду расставлять запятые в массиве. Массив, это данные в отведенной области, которые находятся под смещениями, определенными индексами массива.
Для оперирования цветом лучше подходят цветовые модели HSB/HLS, проще задать цвет, получить диапазон цвета. А конвертировать полученное можно без проблем и в hex-представление, да и не обязательно оно, цвет в html можно задавать и как rgb(значения цветовых компонент).