Google "free space optical communication" - also google "ronja twibright labs".
What you are wanting to do is possible, but depending on the distance and speeds you are trying to achieve, it can range from "easy" to "very difficult and expensive".
I'm going to assume that you can get the data to and from the Arduino with this setup (there's plenty of code out there on how to connect via ethernet to the Arduino using the module you have - so no need to detail that here).
What you want to know is how to convert the data into light and the reverse.
Well, if you google "arduino fiber optic communication" you'll be halfway there - just replace the fiber optic with "free air" and the rest (optics and such).
The other half? Well, you also need to be able to discriminate between the light from the LED and ambient light. The way to do that is to use modulation. A simple modulation scheme good for light communication is to use FM modulation. Basically, you set up a "carrier wave" (for light, that would be a known continuous set of pulses of a known frequency - think of the LED blinking at a set speed), then you would vary that modulation by some amount to represent a "HIGH" and by another amount to represent a "LOW". You might also vary it to represent the "START" and "STOP" of a packet of information.
Say you blinked your LED at 10 KHz. Your other Arduino could detect this, and see that it has the carrier wave signal - so it knows it is connected and receiving ok. Then the first Arduino sends a "START" by changing the carrier wave to 9.5 KHz. The second Arduino see this, and readies its buffer for receiving data. Then the HIGH and LOW bits are sent by varying the carrier between 10.5 KHz (LOW) and 11 KHz (HIGH) - then another 9.5 KHz is sent to represent the end of the packet of information.
You'd also have to set up your communications protocol so that each side knows when it is sending vs receiving (this is called asynchronous serial communication) - so that both sides aren't sending at the same time and causing problems (I am not sure if the Arduino is fast enough to allow for bi-directional comms - also called bisynchronous - but you could experiment with it).
For distance, you need not only to use bright LEDs (or lasers), but you also need good optics and alignment on each end (which isn't as easy as you may think), plus probably amplifiers and filtering on the receiving end. Speed will be a matter of how fast you can blink the LEDs.
For how to do the optical side of stuff - besides the info on the RONJA site - look into Forrest M. Mims III's mini-engineers notebook on communications projects - in there, he has some info for the optics side (and you might be able to adapt some of the amplifier/filtering circuits he uses for his audio transmitter). Alternatively, using the optics from a telescope or binoculars could possibly help.