How about a simple bourne shell script (mostly):
tr -d ':,' file.txt | while read p r; do for i in $r; do echo "$p.$i"; done; done
The "tr" command just cleans the colons (:) and commas (,) out - this answer relies on there being whitespace in the data (which the sample data has - otherwise you need to use sed to convert : and , into whitespace instead of tr).
The output of "tr" is piped into the outer loop "while read...; do ...; done" which reads lines and breaks them into two, at the first occurence of whitespace (or rather the contents of "$IFS" - the shell input field separator, which defaults to whitespace), leaving the prefix in "$p" and the rest of the line in "$r".
The inner loop "for i in ...; do ...; done" then breaks the contents of "$r" up at whitespace ("$IFS") and puts each item into "$i" before executing the echo command.
EDIT: see comments - you don't need "tr" at all ... the colons and commas can be cleaned by including them in the IFS variable like so:
OIFS="$IFS"; IFS=":, "; while read p r; do
for i in $r; do echo "$p.$i"; done; done <file.txt; IFS="$OIFS"
all done within the shell - no calls to external programs ... (unless echo is not builtin).
Note the IFS= above has a space and a tab char.
Also note that the $r in the second for loop does not have quotes around it - this is deliberate so the shell will split it on whitespace.