If you need to limit the number of rows returned by one of your tables, you could use a CROSS APPLY solution.

Right table expression is processed once for each row from the left table expression.

    CROSS APPLY (SELECT TOP 1 *  --<< add required fields here don't use *
                 FROM         skh.v_price_book 
                 INNER JOIN   skh.ICITEM 
                 ON           skh.ICITEM.ITEMNO = pb.item_short
                 AND          skh.ICITEM.AUDTORG = pb.company
                 INNER JOIN   skh.v_list_price_each 
                 ON           skh.v_list_price_each.item_short = pb.item_short
                 WHERE        skh.v_price_book.price_list = skh.ARCUS.PRICLIST
                 AND          skh.ICITEM.INACTIVE = 0) pb

Due you're using a TOP (X) expression, you could add an ORDER BY clause into the SELECT statement.

    SELECT      skh.ARCUS.IDCUST,
                pb.ITEMNO AS product_code,
                pb.CNTLACCT,
                pb.price AS list_price,
                pb.price,
                pb.unit AS Expr2,
                pb.price_unit
    FROM        skh.ARCUS
    CROSS APPLY (SELECT TOP 1 *  --<< add required fields here don't use *
                 FROM         skh.v_price_book 
                 INNER JOIN   skh.ICITEM 
                 ON           skh.ICITEM.ITEMNO = pb.item_short
                 AND          skh.ICITEM.AUDTORG = pb.company
                 INNER JOIN   skh.v_list_price_each 
                 ON           skh.v_list_price_each.item_short = pb.item_short
                 WHERE        skh.v_price_book.price_list = skh.ARCUS.PRICLIST
                 AND          skh.ICITEM.INACTIVE = 0) pb
    WHERE        skh.ARCUS.SWACTV = 1
    --ORDER BY    skh.ARCUS.IDCUST

As it seems you're using this query within a VIEW (TOP (100) PERCENT), I'd suggest you to remove TOP and move ORDER BY to your SELECT view_name statement.