As discussed in http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1195036223/15
the way the automatic prototype generation works causes some issues(http://www.arduino.cc/en/Guide/Troubleshooting#toc22
One suggestion for a workaround to implement that was not suggested there but should be fairly easy to do is to check if an exact prototype for the function that was just encountered has already been seen, if not then make one as usual. If it has been seen(because it was already written in the source) then don't generate a prototype. Update the FAQ with a comment about explicitly putting in a prototype if you use custom datatypes in the return type or argument list of a function to maybe fix the issue).
Currently it doesn't seem to matter if you explicitly declare prototypes.
The old thread suggests typecasting void pointers which of course works but it much more ugly and less readable than this solution would be, not to mention the horrors that can come of (beginners) playing with pointers.