Thank you for your discussion.
I have considered this situation. It works as follow:
1. Scrollview A's method `beforeDraw()` is called firstly. In this method, 
`glEnable(GL_SCISSOR_TEST);`
`CCEGLView::sharedOpenGLView()->setScissorInPoints(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);`
is called. This will set the scissor rectangle of A as the global scissor rectangle.
2. Assume that the zOrder of sub-scrollview B is less than the C's, so that the B's method `visit()` is called firstly: 
    1) In the B's `beforeDraw()` method, the global scissor rectangle(ie, the scissor rectangle of A) is recorded in member variable `m_tParentScissorRect`. Then the intersection of A's scissor rectangle and B's scissor rectangle is set as the global scissor rectangle.
    2) The `visit()` method of B's subview is called, then B's `draw()` method is called.
    3) B's `afterDraw()` method is called. In this method, A's scissor rectangle(recorded in the member variable `m_tParentScissorRect`) is      restored as the global scissor rectangle. This means that the current scissor rectangle is same as the scissor rectangle before B is visited.
3. C's `visit()` method is called as B. In the `beforeDraw()` method of C, the method `CCEGLView::sharedOpenGLView()->getScissorRect();` will return the scissor rectangle of A, because the A's scissor rectangle is restored in B's `afterDraw()` method.
4. A's other subview is visited, and then A is draw.
4. Finally, A's `afterDraw()` method is called, this will set the `GL_SCISSOR_TEST` disabled.
Am I right?
Sorry about my poor English!