EDIT: Didn't check for new posts before I posted, I see you basically have the same thing already. Your problem with all blocks getting destroyed is that the event isn't picking them properly, usually due to how you set up events -- if you post your .capx, I can help you more on that.<img src="smileys/smiley1.gif" border="0" align="middle" />
First, you want to make the block solid. If you don't know how to do that, click on the block in the bottom right in the object list, then add "Solid" as a behavior in the panel on the left.
Next, you'll have to make a small invisible sprite following your player. It'll serve as your little "detector"; since two solid objects can't overlap each other, you need something that isn't solid to detect collisions. Have an "Every tick" event that sets the detector's position to your character's X and the top of their sprite (either figure out what that is manually, or say "Player.Y-(Player.Height/2)", since Y is their center).
Now you can detect collisions between the detector and the block. So on collision between Detector and Block (you can also test to make sure your player is jumping), destroy block.
This is what I do and works perfectly, hope my explanation was good enough!