You would probably want to use busses rather than doing everything inside the same SynthDef. I have not worked with surround sounds myself. You might wanna take a lot at the Ambisonic Toolkit. Here is solution with standard Ugens I think should work, kind of like a half-normal patch bay.
~surroundbus = 5.collect{Bus.audio(s, 1)}
(
SynthDef(\surroundSig, {|bus = #[0,1,2,3,4]|
var surroundMockUp = 5.collect{|i|SinOsc.ar(110 * (i + 1)) * 1/(i+1) * 0.1};
5.collect{|i|Out.ar(bus[i], surroundMockUp[i])}
}).add;
SynthDef(\out, {|in = #[0,1,2,3,4], routing = #[0,1,2,3,4]|
routing.collect{|n, i|Out.ar(n, In.ar(in[i]))};
}).add;
)
x = Synth(\surroundSig, [\bus, ~surroundbus]);
y = Synth(\out, [\in, ~surroundbus], addAction: \addToTail);
y.set(\routing, [3,5,6,7,1]); // change routing