With unbalanced class, do I have to use under sampling on my validation/testing datasets?
Great question...  Here are some specific answers to your numbered questions:

1) You should cross validate on B not B`.  Otherwise, you won't know how well your class balancing is working.  It couldn't hurt to cross validate on both B and B` and will be useful based on the answer to 4 below.

2) You should test on both C and C` based on 4 below.

3) I would stick with F1 and it could be useful to use ROC-AUC and this provides a good sanity check.  Both tend to be useful with unbalanced classes.

4) This gets really tricky.  The problem with this is that the best method requires that you reinterpret what the learning curves should look like or use both the re-sampled and original data sets.  

The classic interpretation of learning curves is: 


Overfit - Lines don't quite come together; 
Underfit - Lines come together but at too low an F1 score;
Just Right - Lines come together with a reasonable F1 score.  


Now, if you are training on A` and testing on C, the lines will never completely come together.  If you are training on A` and testing on C` the results won't be meaningful in the context of the original problem.  So what do you do?  

The answer is to train on A` and test on B`, but also test on B.  Get the F1 score for B` where you want it to be, then check the F1 score for B.  Then do your testing and generate learning curves for C.  The curves won't ever come together, but you will have a sense of the acceptable bias... its the difference between F1(B) and F1(B`).

Now, the new interpretation of your learning curves is: 


Overfit - Lines don't come together and are farther apart than F1(B`)-F1(B);
Underfit - Lines don't come together but the difference is less than F1(B`)-F1(B) and the F1(C) score is under F1(B);
Just right - Lines don't come together but the difference is less than F1(B`)-F1(B) with an F1(C) score similar to F1(B).


General: I strenuously suggest that for unbalanced classes you first try adjusting your class weights in your learning algorithm instead of over/under-sampling as it avoids all of the rigor moral that we've outlined above.  Its very easy in libraries like scikit-learn and pretty easy to hand code in anything that uses a sigmoid function or a majority vote.

Hope this helps!