Looks like you're 90% there, why not just swap the arg and args groupings and do:
import re
fn_match = re.match(r"(?P\w+)\s?\((?P(?P\w+(,\s?)?)+)\)", s)
fn_dict = fn_match.groupdict()
del fn_dict['args']
fn_dict['arg'] = [arg.strip() for arg in fn_dict['arg'].split(',')]