Is there a different between one hot encoding and labelling categorical as scalar value and then normalise the batch? Let's say I have label = ['Male', 'Female', 'Undefined'].
Is there a difference if I label it as: 

[[1, 0, 0], [0, 1, 0], [0, 0, 1]]


compare to labeling it as

[0, 1, 2] and then normalize the data later?

On the topic of this, what if I have another feature age, which of course only has the length of 1. How would I input Age and Gender in the case I choose one hot encoding, since the length of Gender now becomes 3? I'm using Keras.
The second option is wrong. If you label Male, Female, Undefined as [0, 1, 2] you are treating categories as numbers. That is not correct. The Network in this way would learn something such as Undefined &gt; Female, which doesn't make sense.

You need one hot encoding to treat those variables: they are not a numerical values that you can put on a scale.

About the Age question: if that's a numerical variable (expressed in years, I guess?) then you can feed it directly into the Neural Network without problems.