delete не должен же трогать прототип вообще в этом случае
С чего вы так решили?
Третий вызов delete находит свойство b в экземпляре и удаляет его.
Четвертый вызов delete не находит свойство b в экземпляре, спускается по цепочке в прототип, находит там свойство b и удаляет в объекте по ссылке b свойство c. Сам объект b из прототипа через экземпляр удалить нельзя, а любые его свойства можно.
Все по канонам JavaScript. Почитать.
Глобальная a и локальная а ссылаются на один и тот же объект. Вы переопределяете только локальную a из скоупа функции b.
Ваш код для наглядности можно переписать так:
var a = {};
+function b(c) {
console.log(a === c); // true
c.a = 10;
c = null;
console.log(a === c); // false
}(a);
console.log(a); // { a: 10 }
Тут а и c ссылки которые ссылаются на один и тот же объект. Вы переопределили c, а продолжает ссылаться на объект. Почитайте.