The most common reason that Arduino shields "conflict" is because the Chip Select pin for an SPI on the shield is hardwired on the shield. Sometimes this is manifest in an accompanying software library for the shield that assumes the shield's wiring. A forgiving reason things end up this way is a tradeoff between elegance of the software and ease of use for the end user.
If you are optimizing flexibility, you will design your software to have the (potentially conflicting) pin assignments abstracted into a constructor or setter function, and make the default constructor make default assumptions about your hardware. You would also need to provide a jumper on your shield that you can shunt for "default" behavior or wire wherever to any of the I/O pins with a "soft" wire.
If every shield followed that practice, then there would not be such thing as conflicting shields. The drawback of the flexibility is that the more interfaces are exposed to users the higher the barrier to entry for beginners. I don't think anyone would argue that beginners are the majority of Arduino users, and so ease of use wins the day - fewer options and simplicity are better in most cases for the Arduino community.
A good example of a library and a shield that do it the "elegant" way are the LiquidCrystal library that comes standard with Arduino. There are five pins on the LCD interface that are software definable. I made a Basic LCD shield and had to make these kinds of choices in the design. I decided to favor flexibility because (1) the library already supported it, and (2) LCDs themselves are not consistent in their pinout. So I provided a whole bank of jumpers effectively "abstracting" the LCD from the shield in hardware. Maybe that wasn't the right choice in retrospect, but the spirit of my decision was to support whatever LCD you might want to use and whichever Arduino pins you might want to use.
If I had hard wired for certain Arduino pins and a particular LCD pinout, I could have saved users a few minutes of soldering, at the expense of flexibility and interoperability with other shields. In my case though, I saw the LCD shield as something that might be at "the top" of a shield stack, so maybe the flexibility was meritted in this case. There simply isn't a one-size fits all answer I'm afraid.
Best Answer
Series 2 is also pre-configured for 9600 bps, AT mode. PAN ID in the ones I have was 234, but YMMV. You will need a Windows computer with X-CTU software to set one of the XBees as coordinator (I'm guessing your problem is that they're both configured as "end devices" out of the box).
If you have the XBee explorer dongle, fine. If not, you can put the XBee in the Arduino shield and mount it on an Arduino, just remove the processor from the Arduino beforehand, so that it does not interfere with the serial signals.
The steps afterwards: fire up X-CTU, select the serial port for the Arduino/XBee shield, go to Modem Configuration, click on Read, and take note of the firmware version, e.g. ZNET ... Router/End device. Take note of the Serial numbers too (SH and SL). Change the PAN id (ID parameter) to something you like, and give the XBee a name (in the NI parameter, take care to delete the space that is there by default). Click on "Write".
Then, with the other XBee, do the same. Set the same PAN id, give it another name, e.g. "coordinator", then change the firmware to "ZNET ... Coordinator" (the ZNET part can be also something else, but must match in both XBees). Click on "Write".
Once done, make sure to have both XBees powered on, and plug the coordinator XBee to a computer. In X-CTU, go to the Terminal tab, and type +++ (type, not copy-paste. The tiny pause between keypresses plays a role). You should get "OK" back. now type ATND you should get a list that shows the other XBee's name, address, and some other infos. When you get to that point, you know they are talking to each other. From that point on, put the processor back into the arduino and use the xbee-arduino library from Andrew Rapp. Note that before using the library, you will need to use X-CTU again on both XBees to set API mode 2 (parameter AP, value 2). Do that only after you're certain the communication works, otherwise you'll have difficulty finding out where the problem is.
Remember, the Arduino canot be programmed with the shield on (or at least some jumpers or a switch on the shield have to be moved).
Check here for a list of resources & debugging tips I found useful: http://erion.elmasllari.com/topics/arduino-projects/
Cheers & good luck!