I see lots of requests for event pokemon and the like around, and I just read about/tested this method, and lo and behold, it works! The short version is:
In HeartGold and SoulSilver, you can exploit the GTS in such a way as to send a pokemon file from your computer to your actual game. In essence allowing you to give yourself LEGIT event pokemon or... any pokemon!
Interested? Read on!
Pretty much, this is an exploitation of the GTS Gift system in HG/SS, using a program written in the programming language Python, that tells your game's GTS that you've received a pokemon.
Preemptive warning! I've never had a problem, nor have I heard of any, but I make no claims of absolute safety of this method. There COULD be a minute chance of this bricking your game or deleting your save, but I see no reason why it would. Use at one's own risk, though.
What you'll need!
-A few Python files to be linked herein
-.PKM files of the pokemon you'd like to receive
-Wifi access, of course
And the procedure?
1. If you don't already have it, download Python 2.6 and install it. Python is simply a programming language.
2. Download these files. Extract them somewhere nice and easy to remember. These files are programs written in Python.
3. Download a couple .PKM files of your choice. May I recommend http://www.pkmdb.com/ ? Here are their Event pokemon downloads (you want the pokemon files, not the Wonder Cards)
4. Place them in the same folder as the sendpkm.zip files, the ones you downloaded in step two (not necessary, but makes it easier). Note: it must be designated as a Party Pokemon, not a Storage Pokemon. You probably won't have to worry about this if you're just downloading from the above site. However, this method works with pokemon files created through the use of Pokesav, too. NOTE: The GTS DOES still check for blatant hacks! Any moveset is allowed, but no 255 EVs in all stats or the like, else you won't be able to receive it.
5. Drag and drop a .PKM file ONTO the file "sendpkm.py". It will open a dos prompt window that will say what IP address you need to enter in the next step.
6. In your DS's wifi settings (accessible at the bottom of the Continue screen on your Pokemon game), assuming you've already got a connection to your local wireless network set up, click the settings for that connection. Scroll down a bit and, where it says something about the "DNS", change Autoconnect to "No", and manually enter the IP address that the dos prompt says (it should be a LAN address, so possibly beginning with 192.168 or similar). Save your settings and load your game.
7. Go to the GTS in-game. Connect and if all went well, you will receive the Pokemon you uploaded! It will be sent to Box 1 in your PC, if your party is full. Oftentimes, the connection takes longer than normal to establish. It's okay, it's normal.
8. Don't forget to set the DNS settings on your DS back to normal if you want to use official online functions!
Also: it's apparently common to, after connecting to the GTS, receive a bluescreen sort of error in-game. Depending on when this happens, your Pokemon may already be saved, or you may need to reconnect and get it again. In my tests, though, it's totally fine and natural to happen, just a bit annoying, and has NO bearing on your actual game.
This sounds a little convoluted, but it honestly works! Don't be afraid to take a whack at it; the worst thing that may happen if you flub up is having to reset your Wifi settings. Feel free to try it, and have fun getting those event pokemon you missed out on!
Any questions, just ask :D.
Edit: A commonly reported error when trying to execute this is a "socket error 10013" on Vista and up. This just means you have some other program running that's clogging the port Python wants to use. Likely culprits are Skype and Steam. Try killing those processes (or any other you think might be the issue) and trying again.