As I said in the first quote that you acknowledged; an index references all enabled attribute arrays. You can only have one index array, and each index in that array will reference all enabled attributes to construct one vertex. Thus, if you have the index array [1, 4, 5], then you have three vertices; first vertex is constructed from the second position and the second normal; the second vertex is constructed from the fifth position and the fifth normal; and the third vertex is constructed from the sixth position and the sixth normal.
I can build either one or two arrays. One with vertices and normals interleaved, or two separate arrays that each correspond to a distinct attribute variable. Assuming I have two GL_ARRAY_BUFFERS, each attached to its own attribute variable in the vertex shader, how does OpenGL know which index values correspond to each array/attribute?
FYI, my index is from the COLLADA file, and looks like this (where V is a vertex position, and N is a normal):
Each index references all enabled attributes to construct a single vertex, and the array of indices are reference in sequence to construct a sequence of vertices.
edit: And note it is irrelevant whether you have an interleaved array or two separate arrays. An array (in this context) is defined by the glVertexAttribPointer. Whether you make the two calls (one for positions and one for normals) to the same or different buffer objects, or with packed or strided arrays, is irrelevant. Two pointers; two arrays.