I wouldn't worry about v1. Jump right on the v2 wagon, you won't be missing out.
I read Ray Wenderlichs tut on shaders, and scrutinized @slembcke's SpacePatrol, as I wanted to do something similar. None of them was to much use at first, because for me, the first main obstacle was understanding the basics. Like: If you assign a varying with an attribute, it will automatically lerp the range to next attribute. A'what?
So unlike Rays tut, which gave me the impression that a fragment shader could work alone, I dug into CCSprite, and looked at how Riq did it. So I basically learned this:
You need to have both a vertex and a pixel shader. As cocos2d comes with a lot of predefined shaders, you can grab one of those, if you just want to modify the other.
There are 4 kinds of data
a) data which OpenGL knows, like vec4 gl_FragColor ( the value you assign the final color to )
b) uniform data ( variables which are constant during rendering, ex a texture )
c) attributes data ( variables which changes based on vertex information, ex texture coordinates for vertices )
d) varying data ( variables passed from the vertex shader to the fragment shader )
You will need to set uniform and attribute data, as these are input to the shader. How you do this is very different. Uniform data is set using an OpenGL command glUniform, where as attributes are passed as arrays, like vertices in ES1 ( vertices are in ES2 regarded attributes ). It took me quite some time to understand the difference.
You will need to understand, that varying data are interpolated ( I think that is the right term ) pr pixel, automatically calculated from your attribute ( pr vertex ) data. If you in your vertex shader assign a varying v_texcoord = attribute a_texcoord, the attribute pr vertex texture coordinate you provided, will automatically be calculated to a pr pixel texture coordinate in the fragment shader. This works for all data you provide pr vertex.
Once you get this in place, it gets easier.
You of course have no "inline syntax checking or breakpoints" in shaders, so it is "cut and try". Like in them old days. The language however, is very flexible. You work with floats, vec2, vec3, vec4 and matrices, and if you ex want to cut brightness into half, you simply go something like.
gl_FragColor = 0.5 * the_vec4_color_from_the_texture;
Ups, actually I should have recommended something. Just ranting. Bummer!