I have not actually implemented it completely, but I did begin the whole process on a MicroLogix 14 and using EthernetIP, it will talk just fine without using any additional hardware to a Logix controller platform. If you know anything about AB (i'm pretty rusty) you use messaging to connect by setting up tables for the variables in the ML. It's been a while so I don't remember the commands, but if you have access to the strategy for the Logix, then it's really just a matter of reading the docs from Opto22 on the web pertaining to doing a Opto for AB set up. It's really a very complete step by set process in the AB.
The Opto side is also pretty straightforward. There is a free software package to download and run on your PC and it allows you to create a config file to download to the Pac controller (or brain) that sets up the scratch pad for EthernetIP. All of this is in the docs online.
The scratchpad is really simple to use in general, it is simply like using a table in Pac Control, and you use commands for reading and writing to it, and then use commands to send or receive it to another remote IP address. The key to using it is creating a spreadsheet to keep track of what registers are doing what and whether they are being read or written. The table itself is simply a memory map area of the controller or brain that is reserved for this purpose.
Using the controller instead of a brain is simply a matter of creating a generic brain in pac control in the controller, check Pac Man docs as well.
I use scratch all the time for peer to peer. There is a scratch pad area for each type of data, integers, floats, strings, bits. Each has an area of something like 10,000 registers, stings have less. You can create multiple tables in say the integer area by reading an writing (or reading) from register 100 to 199 for instance and then sending (or receiving) that same area. Typically, I read or write the scratch table to or from a table in Pac Control, but you can also do single elements. So to summarize, you're moving data from (or to) Pac Control vars or tables to scratch and then sending (or receiving) the scratch to some IP (or other controller or brain).