Difference between specifying argument and not in NumPy
This due to the order of optional arguments. Perhaps this example can explain thing for you:
def foo(x = 1, y = 2, z = 3):
    print((x, y, z))

In [1]: foo()
(1, 2, 3)

In [2]: foo(4)
(4, 2, 3)

In [3]: foo(z = 4)
(1, 2, 4)

Now looking at help about np.random.normal, we get:
In [4]: help(np.random.normal)
Help on built-in function normal:

normal(...) method of mtrand.RandomState instance
    normal(loc=0.0, scale=1.0, size=None)

That means that since loc is the first optional argument, np.random.normal((size, size)) is interpreted as np.random.normal(loc = (size, size)) and not as np.random.normal(size = (size, size))