MovePosition with Multiple Scripts

I have a GameObject. It has the following two scripts attached:

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Rigidbody2D))]
public class MovePosition1 : MonoBehaviour
{
    void FixedUpdate()
    {
        float newX = transform.position.x + 1;
        float newY = transform.position.y;
        Vector2 newPosition = new Vector2(newX, newY);
        rigidbody2D.MovePosition(newPosition);
    }
}

==========================================================

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Rigidbody2D))]
public class MovePosition2 : MonoBehaviour
{
    void FixedUpdate()
    {
        float newX = transform.position.x;
        float newY = transform.position.y + 1;
        Vector2 newPosition = new Vector2(newX, newY);
        rigidbody2D.MovePosition(newPosition);
    }
}

But only one of the Rigidbody2D.MovePosition() calls are taking place. Why is this? How can I fix this (without combining the scripts)?

Short answer is you can’t.

This is from the documentation on MovePosition:

It is important to understand that the actual position change will only occur during the next physics update therefore calling this method repeatedly without waiting for the next physics update will result in the last call being used. For this reason, it is recommended that it is called during the FixedUpdate callback.

As the documentation suggests, you should have a single behaviour that calls MovePosition.

For example you could create a behaviour called Mover with a Move method that adds up the requested movement vectors every frame. Then on FixedUpdate Mover would call rigidbody2d.MovePosition once with the combined movement vector.