I think this does what you want. The trick is to loop through the characters. Your template operated on only the first character in the list.
Code:
program:
result = '';
if $#chars then
# Loop through the characters adding the universe prefix
for char in '#chars':
result = strcat(result, first_non_empty($#universe, $series, $title), '.', char, ',')
rof;
# Clean up the list, adding spaces and removing the trailing comma
result = list_union(result, '', ',')
fi;
result