One possibility (a bit similar to @KCotreau's suggestion) is to use ddrescue to clone it to either another drive (at least as large as the original) or to a disk image file.
What ddrescue does is to copy the contents of the drive, skipping over any sections that don't read successfully; then it goes back and retries the sections that got errors on the first pass. The longer you leave it running, the more data you'll get (unless the disk is completely unreadable).
You can even let it run for a while, then mount the recovered volume (it must be read-only -- if it's an image file, just lock the file before mounting it) and see if your files are there. If not, dismount it, unlock, and rerun ddrescue to see if it can get any more. You could also run filesystem repair tools on the recovered disk/image, but if you run anything that modifies the volume (at all), you will not be able to continue the recovery (you'd have to restart from the beginning).
Using it will be a bit unintuitive on OS X, since it wants to work with the unix-level device file, not a mounted volume. There's a procedure on tinyapps.org for how to use it to recover a Mac's internal drive; in your situation you'd just skip step 1 and use USB instead of FireWire in step 4. Also, I can't find ddrescue as a compiled binary for OS X (the tinyapps page has a link, but it's in a restricted realm); if you don't have the developer tools available to compile it, let me know and I'll see if I can throw up a copy.
(Note: this is a mostly-copy of my answer to this earlier question.)