Using dd won't help; it will just try to write zeros over the bad blocks. A bad block on a flash chip is not a good sign; it normally means that part of the chip has become damaged (which could be caused by exposure to radiation or a manufacturing defect like a faulty seal on the chip letting a speck of dust in). It shouldn't be possible to corrupt the filesystem just by the camera acting strange; it's more likely that the filesystem corruption confused the camera.
Unless I'm wrong (which is possible), this looks to me like a manufacturing defect. If it's under warranty, I'd try and take it back.
You could run fsck.vfat on the file system to mark the bad blocks after formatting. Repartitioning with -c as you have done should also do the trick. You will lose the storage space with the bad blocks but whatever space is left should be okay.
You can't do a low-level format of a flash chip in the same way as a magnetic hard disk; there aren't any magnetic domains that can be recreated to try and work around the problem. Instead, each storage bit consists of a small electronic circuit built into the semiconductor; you may be able to do something in a clean-room using scanning tunneling microscopes, laser trimming and possibly plasma deposition through carefully-constructed masks but it would be much cheaper just to buy a new one.
Hope that helps,
—Robert J. Lee