Как очистить массив не трогая свойства и методы?
Очистить массив, не трогая добавленные свойства и методы:ar.length = 0
С вашими значениями (вы забыли return в методе sum()):var ar = [1, 2, 3];
ar.sum = function() {
    return this.reduce(function(a, b) {
        return a + b;
    });
}

ar.length = 0;    // значений больше нет, но метод sum() остался
ar.push(5, 6, 7); // добавляем новые значения
ar.sum()          // 18
1) зачем нужно очищать массив? Почему-бы просто не создать новый?
2) оффтоп:
не делай так:ar.sum = function() {
    this.reduce(function(a, b) {
        return a + b;
    });
}
Просто напишу функцию, типаconst sum = arr => arr.reduce((a, b) => a + b)sum(ar); // 6