I haven't found the point translation to be a problem since all of my positions look like sprite.position = ccp(WIDTH * 0.025, HEIGHT * 0.75) so everything tends to fit. There are a few places where I'm a few pixels off and I have macros to handle that. I made a little matrix to help me remember what the different devices look like when retina is enabled:
+--------+-------+----------+--------+
| device | scale | dim | suffix |
+--------+-------+----------+--------+
| 3G | 1 | 320x480 | n/a |
| 4G | 2 | 320x480 | -hd |
| iPad | 1 | 768x1024 | -ipad |
+--------+-------+----------+--------+
cocos scales the position for retina and leaves it alone for other devices.
I actually didn't change enableRetinaDisplay: at all. I simply turn it on if this is a retina device or an ipad. If it's retina then the -hd suffix is used and if it's an ipad the -ipad suffix is used to load the graphics. Since I disable retina on non 4g/ipad devices none of the changes have any effect, but you could leave it enabled all of the time if you wanted. I wouldn't for performance reasons. It's worth noting that you must also have the non suffixed version of the graphics as well as the -hd or -ipad version if you choose to enable the retina support in cocos for ipad and 4g so you support all devices. It's an all or nothing solution.
I made the ipad version of my app first and then turned it into a universal app late in the game. Initially my iphone version was a separate build forked from the ipad one. When I found out I had to support universal I upgraded from 0.99.2 to 0.99.5 and made the above changes.
You must have your project setup to target iPhone/iPad, you can do this by clicking on your project name under Targets in the groups and files pane of xcode and clicking Info, then go to build settings and search for targeted device family. Make sure this is set to iPhone/iPad.
You will need to create a new sprite atlas for each device if you are using those. Otherwise you may want to properly scale your graphics to the new aspect ratio so they don't appear squashed. But using a % based layout handles most of the translation issues.
I've tested this on an ipad, 4g, 3gs and 2nd gen touch and it seems to work pretty well for my app.
As I said there were a sections where my game had a bunch of json levels using absolute positions for the ipad. In those cases I just scaled the coords down using my macros, which look like this:
#define IPHONE_X_SCALE 0.46875f
#define IPHONE_Y_SCALE 0.41666f
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_HD ([[CCDirector sharedDirector] contentScaleFactor] == 2.0f || [[UIScreen mainScreen] scale] == 2.0f)
#define SMALL_DEVICE !IS_IPAD
#define IF_SMALL_DEVICE(true_val,false_val) (SMALL_DEVICE ? true_val : false_val)
#define IF_HD_DEVICE(true_val,false_val) (IS_HD ? true_val : false_val)
#define DEVICE_X_SCALE IF_SD_DEVICE(IPHONE_X_SCALE, 1.0f)
#define DEVICE_Y_SCALE IF_SD_DEVICE(IPHONE_Y_SCALE, 1.0f)
#define SCALE_POSITION(x,y) ccp(x * DEVICE_X_SCALE, y * DEVICE_Y_SCALE)