An input field can be limited to have a certain maximum number of characters. You can set it to '1'.
What do you mean by "tie it to the square"? Create a label, make it a square, put a collider and UIInput on it and change the max chars to 1.Then save this as a prefab and instantiate it as many times as you need to create your puzzle board.
Somewhere underneath it, sure -- using NGUITools.AddChild. Doesn't have to be directly under it, but they do need to be a part of the UI hierarchy.