We’re all and always ! 
There’s no way to circumvent this, when wanting dynamic length array input you have to decide for a max size first in your synthdef. Then you’re free to pass smaller arrays and handle them appropriately. This appropriate handling can be done in different ways
(
~qp1 = [0,1,2,3];
~qp2 = [0,1,2,3,4,5];
SynthDef(\testArray_1, {
arg size = 7, points = #[111, 222, 333, 444, 555, 666, 777];
// indicator is a multichannel *UGen*
var indicator = { |i| i < size } ! points.size;
(indicator * points).poll;
}).add;
)
// compare
z = Synth(\testArray_1, args: [\points, ~qp1]);
z = Synth(\testArray_1, args: [\points, ~qp1, \size, ~qp1.size]);
// alternatively - then 'size' and indicator in the synthdef isn't needed
z = Synth(\testArray_1, args: [\points, ~qp1.copy.extend(7, 0)]);
Of course it’s possible to fill/extend with numbers different from 0.
NamedControl doesn’t change anything about the fixed array size limitation, it only makes it easier to write large array args.