Hi,
Coincidentally, I just finished the Text Justification, Wrapping and Overflowing for my new plugin I2 SmartEdge.
This plugin is not a replacement of the Text object, so it works as a VertexModifier and adds lots of the missing things (like animation, justification, deforms, pixel perfect, etc).
The way I do it for I2 SmartEdge, was to access the result of the textGenerator from the UI.Text.
That gave me info about each line (specially, in which character they start).
You can then parse the text, to see where the whiteSpaces are, so you could separate the words.
Because this is a VertexModifier, you have access to all the vertices, so you know where each character is located. (Every 4 vertices is a character).
With that information, you know where you lines start and end. And how many words are in each line.
You can find the min and max x of each line and you will know how much space you need to add.
Then, its just dividing it against the number of words and voila! Justification!
It can be a bit better if you also allow the characters to move a bit. That’s why in my implementation I added a factor to know how much to move the characters compared to the whole words. Also, you don’t want to move the characters at all if the space is small, so a minimum space value comes handy.
There are a few more small details you have to deal with if you are working on a unity before 5.3, but its essentially the same process.
Hope that helps you implementing your own.
Frank