I ended up doing something similar to what Darren suggests.
spam.tcl now takes both recipients and recipients_str as arguments. The former is a multiple and the latter just a string. Both are optional, and the validation block is used to make sure that one of them is set. If the string is set then it is split into a list, recipients is set properly, and off we go.
Kind of nasty, but I think it's as clean as I can make it under the circumstances. Glad to hear I wasn't overlooking something obvious!