Ich hab schonmal den selben Fall gehabt. Die Lösung ist einfach...

Du verbindest die Controller ganz normal miteinander. Für jeden Controller hast zwei Programmierstecker. Jedoch verbindest du RESET sepperat. Ausserdem verbindest du die RESET-Leitung von Controller A mit einem Beliebigen Eingang von Controller B, und anders rum.

Wenn nun Controller A programmiert werden soll, wird ja RESET auf LOW gezogen. Der Controller B erfasst das an dem Eingang und schaltet (so lange RESET_A auf LOW ist) in eine Schleife, wo er den SPI geaktiviert, und alle PINS die damit zu tun haben als EINGANG scfhaltet. Damit ist sichergestellt dass nix schief geht...