Проблема в том, что во время каждого тайм-аута i равно мерцанию * 2.
Используя замыкание, вы можете зафиксировать значение i, когда тайм-аут установлен, и передать его вашемуФункция ChangeColor.Во время выполнения обратного вызова индекс (ниже) будет равен значению i во время установки времени ожидания.
То, что вы хотите:
function blink (node, flickers) {
var originalColour = node.style.color;
for (var i = 1; i <= (flickers*2); i++) {
setTimeout (function (index) { // current value for i in loop becomes var index
return function() {
ChangeColor(node, (index % 2 == 0) ? originalColour : 'red');
}
}(i), i*200)
}
}
function ChangeColor (node, color) {
node.style.color = color;
}